import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:lib_core/lib_core.dart';
import 'package:lib_uikit/theme/gt_colors_v3.dart';

/// 状态栏主题模式工具类
class GTSystemUiOverlayStyleUtils {

  /// 根据 context，自动判定状态栏主题模式
  static SystemUiOverlayStyle getStyleForContext(BuildContext context, {Color? backgroundColor}) {
    final ThemeData theme = Theme.of(context);
    final AppBarTheme appBarTheme = AppBarTheme.of(context);
    final Color backgroundColor1 = backgroundColor ?? appBarTheme.backgroundColor ?? theme.primaryColor;

    return appBarTheme.systemOverlayStyle ?? getStyleForBrightness(
      ThemeData.estimateBrightnessForColor(backgroundColor1),
      statusBarColor: theme.useMaterial3 ? Colors.transparent : null,
    );
  }

  /// 根据 backgroundColor，自动判定状态栏主题模式
  static SystemUiOverlayStyle getStyleForBackgroundColor(Color? backgroundColor, {Color? statusBarColor}) {
    return getStyleForBrightness(
        ThemeData.estimateBrightnessForColor(
            backgroundColor ?? GTColorsV3.bg1.color), statusBarColor: statusBarColor);
  }

  /// 根据 globalConfig，自动判定状态栏主题模式
  static SystemUiOverlayStyle getStyleForGlobalConfig(GTGlobalConfig globalConfig,
      {Color? statusBarColor, bool isSettingNavigationBar = true}) {
    return getStyleForBrightness(
        globalConfig.darkMode ? Brightness.dark : Brightness.light,
        statusBarColor: statusBarColor ?? (globalConfig.transparentStatusBar
            ? Colors.transparent
            : (globalConfig.darkMode ? GTColorsV3.bg1.dark : GTColorsV3.bg1.light)),
        isSettingNavigationBar: isSettingNavigationBar);
  }

  /// 根据 isDarkMode，判定状态栏主题模式
  static SystemUiOverlayStyle getStyleForMode(bool isDarkMode,
      {Color? statusBarColor, bool isSettingNavigationBar = true}) {

    return getStyleForBrightness(
        isDarkMode ? Brightness.dark : Brightness.light,
        statusBarColor: statusBarColor,
        isSettingNavigationBar: isSettingNavigationBar);
  }

  /// 根据 brightness，自动判定状态栏主题模式
  static SystemUiOverlayStyle getStyleForBrightness(Brightness brightness,
      {Color? statusBarColor, bool isSettingNavigationBar = true}) {
    // 深色模式 用白色字体, 浅色模式 用黑色字体
    final SystemUiOverlayStyle style = brightness == Brightness.light ? SystemUiOverlayStyle.dark : SystemUiOverlayStyle.light;

    if (GTLibCore.globalConfig.isXiaomi()) {
      return _getStyleForXiaomi(brightness, style, statusBarColor: statusBarColor, isSettingNavigationBar: isSettingNavigationBar);
    }

    if (isSettingNavigationBar) {
      return SystemUiOverlayStyle(
        // 状态栏的颜色（Android 专用）
        statusBarColor: statusBarColor
            ?? style.statusBarColor
            ?? (brightness == Brightness.light ? GTColorsV3.bg1.light : GTColorsV3.bg1.dark),
        // 状态栏文字、图标对比度（Android 专用）
        statusBarIconBrightness: style.statusBarIconBrightness,
        // 状态栏文字、图标对比度（iOS 专用）
        statusBarBrightness: style.statusBarBrightness,
        // 底部导航栏颜色（Android 专用）
        systemNavigationBarColor: brightness == Brightness.light ? GTColorsV3.bg1.light : GTColorsV3.bg1.dark,
        // 底部导航栏文字、图标对比度（Android 专用）
        systemNavigationBarIconBrightness:  brightness == Brightness.light ? Brightness.dark : Brightness.light
      );
    } else {
      return SystemUiOverlayStyle(
        // 状态栏的颜色（Android 专用）
          statusBarColor: statusBarColor
              ?? style.statusBarColor
              ?? (brightness == Brightness.light ? GTColorsV3.bg1.light : GTColorsV3.bg1.dark),
          // 状态栏文字、图标对比度（Android 专用）
          statusBarIconBrightness: style.statusBarIconBrightness,
          // 状态栏文字、图标对比度（iOS 专用）
          statusBarBrightness: style.statusBarBrightness,
      );
    }
  }

  static SystemUiOverlayStyle _getStyleForXiaomi(Brightness brightness, SystemUiOverlayStyle style,
      {Color? statusBarColor, bool isSettingNavigationBar = true}) {
    if (brightness == Brightness.light) {
      return SystemUiOverlayStyle(
        // 状态栏的颜色（Android 专用）
          statusBarColor: statusBarColor ?? style.statusBarColor ?? GTColorsV3.bg1.light,
          // 状态栏文字、图标对比度（Android 专用）
          statusBarIconBrightness: style.statusBarIconBrightness,
          // 状态栏文字、图标对比度（iOS 专用）
          statusBarBrightness: style.statusBarBrightness,
      );
    } else {
      if (isSettingNavigationBar) {
        return SystemUiOverlayStyle(
            // 状态栏的颜色（Android 专用）
            statusBarColor:
                statusBarColor ?? style.statusBarColor ?? GTColorsV3.bg1.dark,
            // 状态栏文字、图标对比度（Android 专用）
            statusBarIconBrightness: style.statusBarIconBrightness,
            // 状态栏文字、图标对比度（iOS 专用）
            statusBarBrightness: style.statusBarBrightness,
            // 底部导航栏颜色（Android 专用）
            systemNavigationBarColor: GTColorsV3.bg1.dark,
            // 底部导航栏文字、图标对比度（Android 专用）
            systemNavigationBarIconBrightness: Brightness.light);
      } else {
        return SystemUiOverlayStyle(
          // 状态栏的颜色（Android 专用）
            statusBarColor:
            statusBarColor ?? style.statusBarColor ?? GTColorsV3.bg1.dark,
            // 状态栏文字、图标对比度（Android 专用）
            statusBarIconBrightness: style.statusBarIconBrightness,
            // 状态栏文字、图标对比度（iOS 专用）
            statusBarBrightness: style.statusBarBrightness);
      }
    }
  }

}